package com.hanamaki.study.day01;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Ignore;
import org.testng.annotations.Test;

public class FireFoxDriverTestNg02 {

    /* WebDriver 代表 浏览器 对象 */
    WebDriver driver;

    @BeforeMethod
    public void setUp() {
        /* 1. 注册驱动的位置  */
        System.setProperty("webdriver.gecko.driver", "C:\\Program Files\\Mozilla Firefox\\geckodriver.exe");

        /* 2, 注册驱动 */
        driver = new FirefoxDriver();
    }

    /**
     * /* 1.  使用 xpath 的方式来进行 元素定位
     */
    @Test(enabled = false) /* 使用 enabled = false 也可以禁用测试方法的执行  */
//    @Ignore /* 可以使用  @Ignore 来忽略执行此测试方法 */
    public void xpath() {
        /* 打开网址测试  */
        driver.get("file:///E:/testhtml/exam/index.html");
        WebElement element;
/* 1.  使用 xpath 的方式来进行 元素定位 */
        element = driver.findElement(By.xpath("//a[@target]"));
        element.click();
        /* ctrl + shift + enter  代码补全键  */
        /* alt + enter  */
        String title = driver.getTitle();
        System.out.println(title);
        /* 在此 获取出 实际显示的 标题名 可以通过标题名来判断 操作是否成功  使用TestNg中的断言 Assert 来判断*/
        /* 使用 Assert.assertEquals("实际值","预期值") */
        Assert.assertEquals(title, "房源注册");
    }


    /**
     * 2. 使用 linkText 元素定位的方式来进行 元素抓取   精确查找
     */
    @Test
    public void linkText() {
        driver.get("file:///E:/testhtml/exam/index.html");

        /* 通过 网页中 标签 显示的具体文本值来获取元素实现点击操作                 精确查找 */
        WebElement element = driver.findElement(By.linkText("继续提供房源信息"));
        element.click();


    }

    /**
     * 3. 使用 partialLinkText 元素定位的方式来进行 元素抓取   模糊搜索
     */
    @Test
    public void partialLinkText() {
        driver.get("file:///E:/testhtml/exam/index.html");

        /* 通过 网页中 标签 显示的具体文本值来获取元素实现点击操作                 模糊搜索 */
        WebElement element = driver.findElement(By.partialLinkText("继续提供"));
        element.click();
    }

    /**
     *  4. 使用 标签名 来定位元素  必须保证 标签全局唯一
     */
    @Test
    public void tagName() {
        driver.get("file:///E:/testhtml/exam/index.html");

        /* 通过 网页中 标签 的标签名来进行元素 抓取                   精确的并且全局唯一的标签 */
        WebElement a = driver.findElement(By.tagName("a"));
        a.click();

    }

    /**
     *  5. 使用  css 选择器 来定位元素
     */
    @Test
    public void cssSelector() {
        driver.get("file:///E:/testhtml/exam/index.html");

        /* 通过 网页中 标签 的css 路径来 进行 元素抓取     */
        WebElement element = driver.findElement(By.cssSelector("td a[href]"));
        element.click();

    }


    /**
     *  6. 使用  id 或者 css 中的 id选择器来进行元素定位
     *
     */
    @Test
    public void id() {
        driver.get("file:///E:/testhtml/exam/House.html");

/* 使用 元素定位的方式  id 来获取元素 */
//        WebElement email = driver.findElement(By.id("email"));
//        email.clear();
//        email.sendKeys("123@qq.com");

/*  使用  xpath 的方式来获取邮箱文本框并且输入值      */
//        WebElement element = driver.findElement(By.xpath("//input[@id='email']"));
//        element.clear();
//        element.sendKeys("789@qq.com");

/* css 选择器的方式  通过id    id  在 css 中使用  #  来代表    class 属性在css 中使用 .   来代表来进行元素定位 */
        WebElement element = driver.findElement(By.cssSelector("input#email"));/* input[id='email'] */
        element.clear();
        element.sendKeys("456@qq.com");

    }

    /**
     *  7. 使用  class 或者 css 中的 类选择器来进行元素定位
     *
     */
    @Test
    public void className() {
        driver.get("file:///E:/testhtml/exam/House.html");
/*  通过  className 元素定位的方式来获取元素  */
//        WebElement uname = driver.findElement(By.className("uname"));
//        uname.clear();
//        uname.sendKeys("hanamaki");

/* //input[@class='uname'] */
//        WebElement element = driver.findElement(By.xpath("//input[@class='uname']"));
//        element.clear();
//        element.sendKeys("andy");


/* input.uname */
        WebElement element = driver.findElement(By.cssSelector("input.uname"));
        element.clear();
        element.sendKeys("haha");
    }


    /**
     *  8. 使用 By.name 元素定位的方式来进行元素的获取
     */
    @Test
    public void name() {
        driver.get("file:///E:/testhtml/exam/House.html");

        /*  */
        WebElement username = driver.findElement(By.name("username"));
        username.clear();
        username.sendKeys("yutou");

    }


}
